package com.example.design.component;

/**
 * Component 抽象构件
 * 它可以是接口或抽象类，为叶子构件和容器构件对象声明接口，在该角色中可以包含所有子类共有行为的声明和实现。在抽象构件中定义了访问及管理它的子构件的方法，如增加子构件、删除子构件、获取子构件等。
 */
public abstract class Component {

    protected String name;

    public Component(String name){
        this.name = name;
    }

    /**
     * 增加子节点
     */
    public void add(Component component){
        throw new UnsupportedOperationException();
    }

    /**
     * 产出子节点
     * @param component
     */
    public void remove(Component component){
        throw new UnsupportedOperationException();
    }

    /**
     * 获取成员
     * @param i
     * @return
     */
    public Component getChild(int i){
        throw new UnsupportedOperationException();
    }

    public abstract void print();

    public String getName() {
        return name;
    }
}
